1
一句话概括就是: 箭头函数的this与创建时的封闭词法上下文的this保持一致。

准确一点说应该是,箭头函数没有自己的this以及arguments,所能取到的this是它被创建时的封闭词法上下文。这时候会形成一个闭包,箭头函数将其词法作用域内的this记录在scope属性上。箭头函数使用call,apply,bind传递作用域会被忽略, 但是可以用来传递参数,此时第一个参数应该设置为null。以下为实例:

const foo = ((...rest) => { console.log(this) })
let foo1 = foo.bind({demo: 1}, 'demo')
// window
foo1()
function Foo() {
// Foo 实例
  console.log(this)
  this.obj = {
    // window
    foo: foo,
    // obj
    bar() { console.log(this)    },
    // Foo实例
    zoo: () => { console.log(this) },
      callF() { this.foo(), this.bar(), this.zoo() }
  }
}
let demo = new Foo()
demo.obj.callF()

吴霸霸
300 声望14 粉丝